/*eslint-disable block-scoped-var, no-redeclare, no-control-regex, no-prototype-builtins*/
(function(global, factory) { /* global define, require, module */

    /* AMD */ if (typeof define === 'function' && define.amd)
        define(["protobufjs/minimal"], factory);

    /* CommonJS */ else if (typeof require === 'function' && typeof module === 'object' && module && module.exports)
        module.exports = factory(require("protobufjs/minimal"));

})(this, function($protobuf) {
    "use strict";

    // Common aliases
    var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;
    
    // Exported root namespace
    var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
    
    $root.msg = (function() {
    
        /**
         * Namespace msg.
         * @exports msg
         * @namespace
         */
        var msg = {};
    
        msg.MSG_LoginRequest = (function() {
    
            /**
             * Properties of a MSG_LoginRequest.
             * @memberof msg
             * @interface IMSG_LoginRequest
             * @property {string|null} [request] MSG_LoginRequest request
             */
    
            /**
             * Constructs a new MSG_LoginRequest.
             * @memberof msg
             * @classdesc Represents a MSG_LoginRequest.
             * @implements IMSG_LoginRequest
             * @constructor
             * @param {msg.IMSG_LoginRequest=} [properties] Properties to set
             */
            function MSG_LoginRequest(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * MSG_LoginRequest request.
             * @member {string} request
             * @memberof msg.MSG_LoginRequest
             * @instance
             */
            MSG_LoginRequest.prototype.request = "";
    
            /**
             * Creates a new MSG_LoginRequest instance using the specified properties.
             * @function create
             * @memberof msg.MSG_LoginRequest
             * @static
             * @param {msg.IMSG_LoginRequest=} [properties] Properties to set
             * @returns {msg.MSG_LoginRequest} MSG_LoginRequest instance
             */
            MSG_LoginRequest.create = function create(properties) {
                return new MSG_LoginRequest(properties);
            };
    
            /**
             * Encodes the specified MSG_LoginRequest message. Does not implicitly {@link msg.MSG_LoginRequest.verify|verify} messages.
             * @function encode
             * @memberof msg.MSG_LoginRequest
             * @static
             * @param {msg.IMSG_LoginRequest} message MSG_LoginRequest message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            MSG_LoginRequest.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.request != null && message.hasOwnProperty("request"))
                    writer.uint32(/* id 1, wireType 2 =*/10).string(message.request);
                return writer;
            };
    
            /**
             * Encodes the specified MSG_LoginRequest message, length delimited. Does not implicitly {@link msg.MSG_LoginRequest.verify|verify} messages.
             * @function encodeDelimited
             * @memberof msg.MSG_LoginRequest
             * @static
             * @param {msg.IMSG_LoginRequest} message MSG_LoginRequest message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            MSG_LoginRequest.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a MSG_LoginRequest message from the specified reader or buffer.
             * @function decode
             * @memberof msg.MSG_LoginRequest
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {msg.MSG_LoginRequest} MSG_LoginRequest
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            MSG_LoginRequest.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_LoginRequest();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.request = reader.string();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a MSG_LoginRequest message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof msg.MSG_LoginRequest
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {msg.MSG_LoginRequest} MSG_LoginRequest
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            MSG_LoginRequest.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a MSG_LoginRequest message.
             * @function verify
             * @memberof msg.MSG_LoginRequest
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            MSG_LoginRequest.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.request != null && message.hasOwnProperty("request"))
                    if (!$util.isString(message.request))
                        return "request: string expected";
                return null;
            };
    
            /**
             * Creates a MSG_LoginRequest message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof msg.MSG_LoginRequest
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {msg.MSG_LoginRequest} MSG_LoginRequest
             */
            MSG_LoginRequest.fromObject = function fromObject(object) {
                if (object instanceof $root.msg.MSG_LoginRequest)
                    return object;
                var message = new $root.msg.MSG_LoginRequest();
                if (object.request != null)
                    message.request = String(object.request);
                return message;
            };
    
            /**
             * Creates a plain object from a MSG_LoginRequest message. Also converts values to other types if specified.
             * @function toObject
             * @memberof msg.MSG_LoginRequest
             * @static
             * @param {msg.MSG_LoginRequest} message MSG_LoginRequest
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            MSG_LoginRequest.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults)
                    object.request = "";
                if (message.request != null && message.hasOwnProperty("request"))
                    object.request = message.request;
                return object;
            };
    
            /**
             * Converts this MSG_LoginRequest to JSON.
             * @function toJSON
             * @memberof msg.MSG_LoginRequest
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            MSG_LoginRequest.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return MSG_LoginRequest;
        })();
    
        msg.MSG_LoginResponse = (function() {
    
            /**
             * Properties of a MSG_LoginResponse.
             * @memberof msg
             * @interface IMSG_LoginResponse
             * @property {msg.IT_AccountData|null} [account] MSG_LoginResponse account
             * @property {msg.IT_UserBaseData|null} [user_base] MSG_LoginResponse user_base
             */
    
            /**
             * Constructs a new MSG_LoginResponse.
             * @memberof msg
             * @classdesc Represents a MSG_LoginResponse.
             * @implements IMSG_LoginResponse
             * @constructor
             * @param {msg.IMSG_LoginResponse=} [properties] Properties to set
             */
            function MSG_LoginResponse(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * MSG_LoginResponse account.
             * @member {msg.IT_AccountData|null|undefined} account
             * @memberof msg.MSG_LoginResponse
             * @instance
             */
            MSG_LoginResponse.prototype.account = null;
    
            /**
             * MSG_LoginResponse user_base.
             * @member {msg.IT_UserBaseData|null|undefined} user_base
             * @memberof msg.MSG_LoginResponse
             * @instance
             */
            MSG_LoginResponse.prototype.user_base = null;
    
            /**
             * Creates a new MSG_LoginResponse instance using the specified properties.
             * @function create
             * @memberof msg.MSG_LoginResponse
             * @static
             * @param {msg.IMSG_LoginResponse=} [properties] Properties to set
             * @returns {msg.MSG_LoginResponse} MSG_LoginResponse instance
             */
            MSG_LoginResponse.create = function create(properties) {
                return new MSG_LoginResponse(properties);
            };
    
            /**
             * Encodes the specified MSG_LoginResponse message. Does not implicitly {@link msg.MSG_LoginResponse.verify|verify} messages.
             * @function encode
             * @memberof msg.MSG_LoginResponse
             * @static
             * @param {msg.IMSG_LoginResponse} message MSG_LoginResponse message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            MSG_LoginResponse.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.account != null && message.hasOwnProperty("account"))
                    $root.msg.T_AccountData.encode(message.account, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
                if (message.user_base != null && message.hasOwnProperty("user_base"))
                    $root.msg.T_UserBaseData.encode(message.user_base, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
                return writer;
            };
    
            /**
             * Encodes the specified MSG_LoginResponse message, length delimited. Does not implicitly {@link msg.MSG_LoginResponse.verify|verify} messages.
             * @function encodeDelimited
             * @memberof msg.MSG_LoginResponse
             * @static
             * @param {msg.IMSG_LoginResponse} message MSG_LoginResponse message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            MSG_LoginResponse.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a MSG_LoginResponse message from the specified reader or buffer.
             * @function decode
             * @memberof msg.MSG_LoginResponse
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {msg.MSG_LoginResponse} MSG_LoginResponse
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            MSG_LoginResponse.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_LoginResponse();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.account = $root.msg.T_AccountData.decode(reader, reader.uint32());
                        break;
                    case 2:
                        message.user_base = $root.msg.T_UserBaseData.decode(reader, reader.uint32());
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a MSG_LoginResponse message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof msg.MSG_LoginResponse
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {msg.MSG_LoginResponse} MSG_LoginResponse
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            MSG_LoginResponse.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a MSG_LoginResponse message.
             * @function verify
             * @memberof msg.MSG_LoginResponse
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            MSG_LoginResponse.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.account != null && message.hasOwnProperty("account")) {
                    var error = $root.msg.T_AccountData.verify(message.account);
                    if (error)
                        return "account." + error;
                }
                if (message.user_base != null && message.hasOwnProperty("user_base")) {
                    var error = $root.msg.T_UserBaseData.verify(message.user_base);
                    if (error)
                        return "user_base." + error;
                }
                return null;
            };
    
            /**
             * Creates a MSG_LoginResponse message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof msg.MSG_LoginResponse
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {msg.MSG_LoginResponse} MSG_LoginResponse
             */
            MSG_LoginResponse.fromObject = function fromObject(object) {
                if (object instanceof $root.msg.MSG_LoginResponse)
                    return object;
                var message = new $root.msg.MSG_LoginResponse();
                if (object.account != null) {
                    if (typeof object.account !== "object")
                        throw TypeError(".msg.MSG_LoginResponse.account: object expected");
                    message.account = $root.msg.T_AccountData.fromObject(object.account);
                }
                if (object.user_base != null) {
                    if (typeof object.user_base !== "object")
                        throw TypeError(".msg.MSG_LoginResponse.user_base: object expected");
                    message.user_base = $root.msg.T_UserBaseData.fromObject(object.user_base);
                }
                return message;
            };
    
            /**
             * Creates a plain object from a MSG_LoginResponse message. Also converts values to other types if specified.
             * @function toObject
             * @memberof msg.MSG_LoginResponse
             * @static
             * @param {msg.MSG_LoginResponse} message MSG_LoginResponse
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            MSG_LoginResponse.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.account = null;
                    object.user_base = null;
                }
                if (message.account != null && message.hasOwnProperty("account"))
                    object.account = $root.msg.T_AccountData.toObject(message.account, options);
                if (message.user_base != null && message.hasOwnProperty("user_base"))
                    object.user_base = $root.msg.T_UserBaseData.toObject(message.user_base, options);
                return object;
            };
    
            /**
             * Converts this MSG_LoginResponse to JSON.
             * @function toJSON
             * @memberof msg.MSG_LoginResponse
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            MSG_LoginResponse.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return MSG_LoginResponse;
        })();
    
        msg.T_Vector3 = (function() {
    
            /**
             * Properties of a T_Vector3.
             * @memberof msg
             * @interface IT_Vector3
             * @property {number|null} [x] T_Vector3 x
             * @property {number|null} [y] T_Vector3 y
             * @property {number|null} [z] T_Vector3 z
             */
    
            /**
             * Constructs a new T_Vector3.
             * @memberof msg
             * @classdesc Represents a T_Vector3.
             * @implements IT_Vector3
             * @constructor
             * @param {msg.IT_Vector3=} [properties] Properties to set
             */
            function T_Vector3(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * T_Vector3 x.
             * @member {number} x
             * @memberof msg.T_Vector3
             * @instance
             */
            T_Vector3.prototype.x = 0;
    
            /**
             * T_Vector3 y.
             * @member {number} y
             * @memberof msg.T_Vector3
             * @instance
             */
            T_Vector3.prototype.y = 0;
    
            /**
             * T_Vector3 z.
             * @member {number} z
             * @memberof msg.T_Vector3
             * @instance
             */
            T_Vector3.prototype.z = 0;
    
            /**
             * Creates a new T_Vector3 instance using the specified properties.
             * @function create
             * @memberof msg.T_Vector3
             * @static
             * @param {msg.IT_Vector3=} [properties] Properties to set
             * @returns {msg.T_Vector3} T_Vector3 instance
             */
            T_Vector3.create = function create(properties) {
                return new T_Vector3(properties);
            };
    
            /**
             * Encodes the specified T_Vector3 message. Does not implicitly {@link msg.T_Vector3.verify|verify} messages.
             * @function encode
             * @memberof msg.T_Vector3
             * @static
             * @param {msg.IT_Vector3} message T_Vector3 message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            T_Vector3.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.x != null && message.hasOwnProperty("x"))
                    writer.uint32(/* id 1, wireType 5 =*/13).float(message.x);
                if (message.y != null && message.hasOwnProperty("y"))
                    writer.uint32(/* id 2, wireType 5 =*/21).float(message.y);
                if (message.z != null && message.hasOwnProperty("z"))
                    writer.uint32(/* id 3, wireType 5 =*/29).float(message.z);
                return writer;
            };
    
            /**
             * Encodes the specified T_Vector3 message, length delimited. Does not implicitly {@link msg.T_Vector3.verify|verify} messages.
             * @function encodeDelimited
             * @memberof msg.T_Vector3
             * @static
             * @param {msg.IT_Vector3} message T_Vector3 message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            T_Vector3.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a T_Vector3 message from the specified reader or buffer.
             * @function decode
             * @memberof msg.T_Vector3
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {msg.T_Vector3} T_Vector3
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            T_Vector3.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.T_Vector3();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.x = reader.float();
                        break;
                    case 2:
                        message.y = reader.float();
                        break;
                    case 3:
                        message.z = reader.float();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a T_Vector3 message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof msg.T_Vector3
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {msg.T_Vector3} T_Vector3
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            T_Vector3.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a T_Vector3 message.
             * @function verify
             * @memberof msg.T_Vector3
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            T_Vector3.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.x != null && message.hasOwnProperty("x"))
                    if (typeof message.x !== "number")
                        return "x: number expected";
                if (message.y != null && message.hasOwnProperty("y"))
                    if (typeof message.y !== "number")
                        return "y: number expected";
                if (message.z != null && message.hasOwnProperty("z"))
                    if (typeof message.z !== "number")
                        return "z: number expected";
                return null;
            };
    
            /**
             * Creates a T_Vector3 message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof msg.T_Vector3
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {msg.T_Vector3} T_Vector3
             */
            T_Vector3.fromObject = function fromObject(object) {
                if (object instanceof $root.msg.T_Vector3)
                    return object;
                var message = new $root.msg.T_Vector3();
                if (object.x != null)
                    message.x = Number(object.x);
                if (object.y != null)
                    message.y = Number(object.y);
                if (object.z != null)
                    message.z = Number(object.z);
                return message;
            };
    
            /**
             * Creates a plain object from a T_Vector3 message. Also converts values to other types if specified.
             * @function toObject
             * @memberof msg.T_Vector3
             * @static
             * @param {msg.T_Vector3} message T_Vector3
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            T_Vector3.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.x = 0;
                    object.y = 0;
                    object.z = 0;
                }
                if (message.x != null && message.hasOwnProperty("x"))
                    object.x = options.json && !isFinite(message.x) ? String(message.x) : message.x;
                if (message.y != null && message.hasOwnProperty("y"))
                    object.y = options.json && !isFinite(message.y) ? String(message.y) : message.y;
                if (message.z != null && message.hasOwnProperty("z"))
                    object.z = options.json && !isFinite(message.z) ? String(message.z) : message.z;
                return object;
            };
    
            /**
             * Converts this T_Vector3 to JSON.
             * @function toJSON
             * @memberof msg.T_Vector3
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            T_Vector3.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return T_Vector3;
        })();
    
        msg.T_AccountData = (function() {
    
            /**
             * Properties of a T_AccountData.
             * @memberof msg
             * @interface IT_AccountData
             * @property {string|null} [account] T_AccountData account
             * @property {number|Long|null} [user_id] T_AccountData user_id
             */
    
            /**
             * Constructs a new T_AccountData.
             * @memberof msg
             * @classdesc Represents a T_AccountData.
             * @implements IT_AccountData
             * @constructor
             * @param {msg.IT_AccountData=} [properties] Properties to set
             */
            function T_AccountData(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * T_AccountData account.
             * @member {string} account
             * @memberof msg.T_AccountData
             * @instance
             */
            T_AccountData.prototype.account = "";
    
            /**
             * T_AccountData user_id.
             * @member {number|Long} user_id
             * @memberof msg.T_AccountData
             * @instance
             */
            T_AccountData.prototype.user_id = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
            /**
             * Creates a new T_AccountData instance using the specified properties.
             * @function create
             * @memberof msg.T_AccountData
             * @static
             * @param {msg.IT_AccountData=} [properties] Properties to set
             * @returns {msg.T_AccountData} T_AccountData instance
             */
            T_AccountData.create = function create(properties) {
                return new T_AccountData(properties);
            };
    
            /**
             * Encodes the specified T_AccountData message. Does not implicitly {@link msg.T_AccountData.verify|verify} messages.
             * @function encode
             * @memberof msg.T_AccountData
             * @static
             * @param {msg.IT_AccountData} message T_AccountData message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            T_AccountData.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.account != null && message.hasOwnProperty("account"))
                    writer.uint32(/* id 1, wireType 2 =*/10).string(message.account);
                if (message.user_id != null && message.hasOwnProperty("user_id"))
                    writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.user_id);
                return writer;
            };
    
            /**
             * Encodes the specified T_AccountData message, length delimited. Does not implicitly {@link msg.T_AccountData.verify|verify} messages.
             * @function encodeDelimited
             * @memberof msg.T_AccountData
             * @static
             * @param {msg.IT_AccountData} message T_AccountData message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            T_AccountData.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a T_AccountData message from the specified reader or buffer.
             * @function decode
             * @memberof msg.T_AccountData
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {msg.T_AccountData} T_AccountData
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            T_AccountData.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.T_AccountData();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.account = reader.string();
                        break;
                    case 2:
                        message.user_id = reader.uint64();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a T_AccountData message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof msg.T_AccountData
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {msg.T_AccountData} T_AccountData
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            T_AccountData.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a T_AccountData message.
             * @function verify
             * @memberof msg.T_AccountData
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            T_AccountData.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.account != null && message.hasOwnProperty("account"))
                    if (!$util.isString(message.account))
                        return "account: string expected";
                if (message.user_id != null && message.hasOwnProperty("user_id"))
                    if (!$util.isInteger(message.user_id) && !(message.user_id && $util.isInteger(message.user_id.low) && $util.isInteger(message.user_id.high)))
                        return "user_id: integer|Long expected";
                return null;
            };
    
            /**
             * Creates a T_AccountData message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof msg.T_AccountData
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {msg.T_AccountData} T_AccountData
             */
            T_AccountData.fromObject = function fromObject(object) {
                if (object instanceof $root.msg.T_AccountData)
                    return object;
                var message = new $root.msg.T_AccountData();
                if (object.account != null)
                    message.account = String(object.account);
                if (object.user_id != null)
                    if ($util.Long)
                        (message.user_id = $util.Long.fromValue(object.user_id)).unsigned = true;
                    else if (typeof object.user_id === "string")
                        message.user_id = parseInt(object.user_id, 10);
                    else if (typeof object.user_id === "number")
                        message.user_id = object.user_id;
                    else if (typeof object.user_id === "object")
                        message.user_id = new $util.LongBits(object.user_id.low >>> 0, object.user_id.high >>> 0).toNumber(true);
                return message;
            };
    
            /**
             * Creates a plain object from a T_AccountData message. Also converts values to other types if specified.
             * @function toObject
             * @memberof msg.T_AccountData
             * @static
             * @param {msg.T_AccountData} message T_AccountData
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            T_AccountData.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.account = "";
                    if ($util.Long) {
                        var long = new $util.Long(0, 0, true);
                        object.user_id = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                    } else
                        object.user_id = options.longs === String ? "0" : 0;
                }
                if (message.account != null && message.hasOwnProperty("account"))
                    object.account = message.account;
                if (message.user_id != null && message.hasOwnProperty("user_id"))
                    if (typeof message.user_id === "number")
                        object.user_id = options.longs === String ? String(message.user_id) : message.user_id;
                    else
                        object.user_id = options.longs === String ? $util.Long.prototype.toString.call(message.user_id) : options.longs === Number ? new $util.LongBits(message.user_id.low >>> 0, message.user_id.high >>> 0).toNumber(true) : message.user_id;
                return object;
            };
    
            /**
             * Converts this T_AccountData to JSON.
             * @function toJSON
             * @memberof msg.T_AccountData
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            T_AccountData.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return T_AccountData;
        })();
    
        msg.T_UserBaseData = (function() {
    
            /**
             * Properties of a T_UserBaseData.
             * @memberof msg
             * @interface IT_UserBaseData
             * @property {number|Long|null} [user_id] T_UserBaseData user_id
             * @property {string|null} [user_name] T_UserBaseData user_name
             */
    
            /**
             * Constructs a new T_UserBaseData.
             * @memberof msg
             * @classdesc Represents a T_UserBaseData.
             * @implements IT_UserBaseData
             * @constructor
             * @param {msg.IT_UserBaseData=} [properties] Properties to set
             */
            function T_UserBaseData(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * T_UserBaseData user_id.
             * @member {number|Long} user_id
             * @memberof msg.T_UserBaseData
             * @instance
             */
            T_UserBaseData.prototype.user_id = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
            /**
             * T_UserBaseData user_name.
             * @member {string} user_name
             * @memberof msg.T_UserBaseData
             * @instance
             */
            T_UserBaseData.prototype.user_name = "";
    
            /**
             * Creates a new T_UserBaseData instance using the specified properties.
             * @function create
             * @memberof msg.T_UserBaseData
             * @static
             * @param {msg.IT_UserBaseData=} [properties] Properties to set
             * @returns {msg.T_UserBaseData} T_UserBaseData instance
             */
            T_UserBaseData.create = function create(properties) {
                return new T_UserBaseData(properties);
            };
    
            /**
             * Encodes the specified T_UserBaseData message. Does not implicitly {@link msg.T_UserBaseData.verify|verify} messages.
             * @function encode
             * @memberof msg.T_UserBaseData
             * @static
             * @param {msg.IT_UserBaseData} message T_UserBaseData message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            T_UserBaseData.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.user_id != null && message.hasOwnProperty("user_id"))
                    writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.user_id);
                if (message.user_name != null && message.hasOwnProperty("user_name"))
                    writer.uint32(/* id 2, wireType 2 =*/18).string(message.user_name);
                return writer;
            };
    
            /**
             * Encodes the specified T_UserBaseData message, length delimited. Does not implicitly {@link msg.T_UserBaseData.verify|verify} messages.
             * @function encodeDelimited
             * @memberof msg.T_UserBaseData
             * @static
             * @param {msg.IT_UserBaseData} message T_UserBaseData message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            T_UserBaseData.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a T_UserBaseData message from the specified reader or buffer.
             * @function decode
             * @memberof msg.T_UserBaseData
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {msg.T_UserBaseData} T_UserBaseData
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            T_UserBaseData.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.T_UserBaseData();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.user_id = reader.uint64();
                        break;
                    case 2:
                        message.user_name = reader.string();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a T_UserBaseData message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof msg.T_UserBaseData
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {msg.T_UserBaseData} T_UserBaseData
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            T_UserBaseData.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a T_UserBaseData message.
             * @function verify
             * @memberof msg.T_UserBaseData
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            T_UserBaseData.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.user_id != null && message.hasOwnProperty("user_id"))
                    if (!$util.isInteger(message.user_id) && !(message.user_id && $util.isInteger(message.user_id.low) && $util.isInteger(message.user_id.high)))
                        return "user_id: integer|Long expected";
                if (message.user_name != null && message.hasOwnProperty("user_name"))
                    if (!$util.isString(message.user_name))
                        return "user_name: string expected";
                return null;
            };
    
            /**
             * Creates a T_UserBaseData message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof msg.T_UserBaseData
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {msg.T_UserBaseData} T_UserBaseData
             */
            T_UserBaseData.fromObject = function fromObject(object) {
                if (object instanceof $root.msg.T_UserBaseData)
                    return object;
                var message = new $root.msg.T_UserBaseData();
                if (object.user_id != null)
                    if ($util.Long)
                        (message.user_id = $util.Long.fromValue(object.user_id)).unsigned = true;
                    else if (typeof object.user_id === "string")
                        message.user_id = parseInt(object.user_id, 10);
                    else if (typeof object.user_id === "number")
                        message.user_id = object.user_id;
                    else if (typeof object.user_id === "object")
                        message.user_id = new $util.LongBits(object.user_id.low >>> 0, object.user_id.high >>> 0).toNumber(true);
                if (object.user_name != null)
                    message.user_name = String(object.user_name);
                return message;
            };
    
            /**
             * Creates a plain object from a T_UserBaseData message. Also converts values to other types if specified.
             * @function toObject
             * @memberof msg.T_UserBaseData
             * @static
             * @param {msg.T_UserBaseData} message T_UserBaseData
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            T_UserBaseData.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    if ($util.Long) {
                        var long = new $util.Long(0, 0, true);
                        object.user_id = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                    } else
                        object.user_id = options.longs === String ? "0" : 0;
                    object.user_name = "";
                }
                if (message.user_id != null && message.hasOwnProperty("user_id"))
                    if (typeof message.user_id === "number")
                        object.user_id = options.longs === String ? String(message.user_id) : message.user_id;
                    else
                        object.user_id = options.longs === String ? $util.Long.prototype.toString.call(message.user_id) : options.longs === Number ? new $util.LongBits(message.user_id.low >>> 0, message.user_id.high >>> 0).toNumber(true) : message.user_id;
                if (message.user_name != null && message.hasOwnProperty("user_name"))
                    object.user_name = message.user_name;
                return object;
            };
    
            /**
             * Converts this T_UserBaseData to JSON.
             * @function toJSON
             * @memberof msg.T_UserBaseData
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            T_UserBaseData.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return T_UserBaseData;
        })();
    
        msg.MSG_PingGameService = (function() {
    
            /**
             * Properties of a MSG_PingGameService.
             * @memberof msg
             * @interface IMSG_PingGameService
             * @property {number|Long|null} [time_stamp] MSG_PingGameService time_stamp
             */
    
            /**
             * Constructs a new MSG_PingGameService.
             * @memberof msg
             * @classdesc Represents a MSG_PingGameService.
             * @implements IMSG_PingGameService
             * @constructor
             * @param {msg.IMSG_PingGameService=} [properties] Properties to set
             */
            function MSG_PingGameService(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * MSG_PingGameService time_stamp.
             * @member {number|Long} time_stamp
             * @memberof msg.MSG_PingGameService
             * @instance
             */
            MSG_PingGameService.prototype.time_stamp = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
            /**
             * Creates a new MSG_PingGameService instance using the specified properties.
             * @function create
             * @memberof msg.MSG_PingGameService
             * @static
             * @param {msg.IMSG_PingGameService=} [properties] Properties to set
             * @returns {msg.MSG_PingGameService} MSG_PingGameService instance
             */
            MSG_PingGameService.create = function create(properties) {
                return new MSG_PingGameService(properties);
            };
    
            /**
             * Encodes the specified MSG_PingGameService message. Does not implicitly {@link msg.MSG_PingGameService.verify|verify} messages.
             * @function encode
             * @memberof msg.MSG_PingGameService
             * @static
             * @param {msg.IMSG_PingGameService} message MSG_PingGameService message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            MSG_PingGameService.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.time_stamp != null && message.hasOwnProperty("time_stamp"))
                    writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.time_stamp);
                return writer;
            };
    
            /**
             * Encodes the specified MSG_PingGameService message, length delimited. Does not implicitly {@link msg.MSG_PingGameService.verify|verify} messages.
             * @function encodeDelimited
             * @memberof msg.MSG_PingGameService
             * @static
             * @param {msg.IMSG_PingGameService} message MSG_PingGameService message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            MSG_PingGameService.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a MSG_PingGameService message from the specified reader or buffer.
             * @function decode
             * @memberof msg.MSG_PingGameService
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {msg.MSG_PingGameService} MSG_PingGameService
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            MSG_PingGameService.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_PingGameService();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.time_stamp = reader.uint64();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a MSG_PingGameService message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof msg.MSG_PingGameService
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {msg.MSG_PingGameService} MSG_PingGameService
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            MSG_PingGameService.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a MSG_PingGameService message.
             * @function verify
             * @memberof msg.MSG_PingGameService
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            MSG_PingGameService.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.time_stamp != null && message.hasOwnProperty("time_stamp"))
                    if (!$util.isInteger(message.time_stamp) && !(message.time_stamp && $util.isInteger(message.time_stamp.low) && $util.isInteger(message.time_stamp.high)))
                        return "time_stamp: integer|Long expected";
                return null;
            };
    
            /**
             * Creates a MSG_PingGameService message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof msg.MSG_PingGameService
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {msg.MSG_PingGameService} MSG_PingGameService
             */
            MSG_PingGameService.fromObject = function fromObject(object) {
                if (object instanceof $root.msg.MSG_PingGameService)
                    return object;
                var message = new $root.msg.MSG_PingGameService();
                if (object.time_stamp != null)
                    if ($util.Long)
                        (message.time_stamp = $util.Long.fromValue(object.time_stamp)).unsigned = true;
                    else if (typeof object.time_stamp === "string")
                        message.time_stamp = parseInt(object.time_stamp, 10);
                    else if (typeof object.time_stamp === "number")
                        message.time_stamp = object.time_stamp;
                    else if (typeof object.time_stamp === "object")
                        message.time_stamp = new $util.LongBits(object.time_stamp.low >>> 0, object.time_stamp.high >>> 0).toNumber(true);
                return message;
            };
    
            /**
             * Creates a plain object from a MSG_PingGameService message. Also converts values to other types if specified.
             * @function toObject
             * @memberof msg.MSG_PingGameService
             * @static
             * @param {msg.MSG_PingGameService} message MSG_PingGameService
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            MSG_PingGameService.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults)
                    if ($util.Long) {
                        var long = new $util.Long(0, 0, true);
                        object.time_stamp = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                    } else
                        object.time_stamp = options.longs === String ? "0" : 0;
                if (message.time_stamp != null && message.hasOwnProperty("time_stamp"))
                    if (typeof message.time_stamp === "number")
                        object.time_stamp = options.longs === String ? String(message.time_stamp) : message.time_stamp;
                    else
                        object.time_stamp = options.longs === String ? $util.Long.prototype.toString.call(message.time_stamp) : options.longs === Number ? new $util.LongBits(message.time_stamp.low >>> 0, message.time_stamp.high >>> 0).toNumber(true) : message.time_stamp;
                return object;
            };
    
            /**
             * Converts this MSG_PingGameService to JSON.
             * @function toJSON
             * @memberof msg.MSG_PingGameService
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            MSG_PingGameService.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return MSG_PingGameService;
        })();
    
        msg.MSG_PongGameService = (function() {
    
            /**
             * Properties of a MSG_PongGameService.
             * @memberof msg
             * @interface IMSG_PongGameService
             * @property {msg.IMSG_PingGameService|null} [data] MSG_PongGameService data
             * @property {number|Long|null} [server_time] MSG_PongGameService server_time
             */
    
            /**
             * Constructs a new MSG_PongGameService.
             * @memberof msg
             * @classdesc Represents a MSG_PongGameService.
             * @implements IMSG_PongGameService
             * @constructor
             * @param {msg.IMSG_PongGameService=} [properties] Properties to set
             */
            function MSG_PongGameService(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * MSG_PongGameService data.
             * @member {msg.IMSG_PingGameService|null|undefined} data
             * @memberof msg.MSG_PongGameService
             * @instance
             */
            MSG_PongGameService.prototype.data = null;
    
            /**
             * MSG_PongGameService server_time.
             * @member {number|Long} server_time
             * @memberof msg.MSG_PongGameService
             * @instance
             */
            MSG_PongGameService.prototype.server_time = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
            /**
             * Creates a new MSG_PongGameService instance using the specified properties.
             * @function create
             * @memberof msg.MSG_PongGameService
             * @static
             * @param {msg.IMSG_PongGameService=} [properties] Properties to set
             * @returns {msg.MSG_PongGameService} MSG_PongGameService instance
             */
            MSG_PongGameService.create = function create(properties) {
                return new MSG_PongGameService(properties);
            };
    
            /**
             * Encodes the specified MSG_PongGameService message. Does not implicitly {@link msg.MSG_PongGameService.verify|verify} messages.
             * @function encode
             * @memberof msg.MSG_PongGameService
             * @static
             * @param {msg.IMSG_PongGameService} message MSG_PongGameService message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            MSG_PongGameService.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.data != null && message.hasOwnProperty("data"))
                    $root.msg.MSG_PingGameService.encode(message.data, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
                if (message.server_time != null && message.hasOwnProperty("server_time"))
                    writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.server_time);
                return writer;
            };
    
            /**
             * Encodes the specified MSG_PongGameService message, length delimited. Does not implicitly {@link msg.MSG_PongGameService.verify|verify} messages.
             * @function encodeDelimited
             * @memberof msg.MSG_PongGameService
             * @static
             * @param {msg.IMSG_PongGameService} message MSG_PongGameService message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            MSG_PongGameService.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a MSG_PongGameService message from the specified reader or buffer.
             * @function decode
             * @memberof msg.MSG_PongGameService
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {msg.MSG_PongGameService} MSG_PongGameService
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            MSG_PongGameService.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_PongGameService();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.data = $root.msg.MSG_PingGameService.decode(reader, reader.uint32());
                        break;
                    case 2:
                        message.server_time = reader.uint64();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a MSG_PongGameService message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof msg.MSG_PongGameService
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {msg.MSG_PongGameService} MSG_PongGameService
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            MSG_PongGameService.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a MSG_PongGameService message.
             * @function verify
             * @memberof msg.MSG_PongGameService
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            MSG_PongGameService.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.data != null && message.hasOwnProperty("data")) {
                    var error = $root.msg.MSG_PingGameService.verify(message.data);
                    if (error)
                        return "data." + error;
                }
                if (message.server_time != null && message.hasOwnProperty("server_time"))
                    if (!$util.isInteger(message.server_time) && !(message.server_time && $util.isInteger(message.server_time.low) && $util.isInteger(message.server_time.high)))
                        return "server_time: integer|Long expected";
                return null;
            };
    
            /**
             * Creates a MSG_PongGameService message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof msg.MSG_PongGameService
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {msg.MSG_PongGameService} MSG_PongGameService
             */
            MSG_PongGameService.fromObject = function fromObject(object) {
                if (object instanceof $root.msg.MSG_PongGameService)
                    return object;
                var message = new $root.msg.MSG_PongGameService();
                if (object.data != null) {
                    if (typeof object.data !== "object")
                        throw TypeError(".msg.MSG_PongGameService.data: object expected");
                    message.data = $root.msg.MSG_PingGameService.fromObject(object.data);
                }
                if (object.server_time != null)
                    if ($util.Long)
                        (message.server_time = $util.Long.fromValue(object.server_time)).unsigned = true;
                    else if (typeof object.server_time === "string")
                        message.server_time = parseInt(object.server_time, 10);
                    else if (typeof object.server_time === "number")
                        message.server_time = object.server_time;
                    else if (typeof object.server_time === "object")
                        message.server_time = new $util.LongBits(object.server_time.low >>> 0, object.server_time.high >>> 0).toNumber(true);
                return message;
            };
    
            /**
             * Creates a plain object from a MSG_PongGameService message. Also converts values to other types if specified.
             * @function toObject
             * @memberof msg.MSG_PongGameService
             * @static
             * @param {msg.MSG_PongGameService} message MSG_PongGameService
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            MSG_PongGameService.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.data = null;
                    if ($util.Long) {
                        var long = new $util.Long(0, 0, true);
                        object.server_time = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                    } else
                        object.server_time = options.longs === String ? "0" : 0;
                }
                if (message.data != null && message.hasOwnProperty("data"))
                    object.data = $root.msg.MSG_PingGameService.toObject(message.data, options);
                if (message.server_time != null && message.hasOwnProperty("server_time"))
                    if (typeof message.server_time === "number")
                        object.server_time = options.longs === String ? String(message.server_time) : message.server_time;
                    else
                        object.server_time = options.longs === String ? $util.Long.prototype.toString.call(message.server_time) : options.longs === Number ? new $util.LongBits(message.server_time.low >>> 0, message.server_time.high >>> 0).toNumber(true) : message.server_time;
                return object;
            };
    
            /**
             * Converts this MSG_PongGameService to JSON.
             * @function toJSON
             * @memberof msg.MSG_PongGameService
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            MSG_PongGameService.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return MSG_PongGameService;
        })();
    
        msg.MSG_Ping = (function() {
    
            /**
             * Properties of a MSG_Ping.
             * @memberof msg
             * @interface IMSG_Ping
             * @property {number|Long|null} [time_stamp] MSG_Ping time_stamp
             */
    
            /**
             * Constructs a new MSG_Ping.
             * @memberof msg
             * @classdesc Represents a MSG_Ping.
             * @implements IMSG_Ping
             * @constructor
             * @param {msg.IMSG_Ping=} [properties] Properties to set
             */
            function MSG_Ping(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * MSG_Ping time_stamp.
             * @member {number|Long} time_stamp
             * @memberof msg.MSG_Ping
             * @instance
             */
            MSG_Ping.prototype.time_stamp = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
            /**
             * Creates a new MSG_Ping instance using the specified properties.
             * @function create
             * @memberof msg.MSG_Ping
             * @static
             * @param {msg.IMSG_Ping=} [properties] Properties to set
             * @returns {msg.MSG_Ping} MSG_Ping instance
             */
            MSG_Ping.create = function create(properties) {
                return new MSG_Ping(properties);
            };
    
            /**
             * Encodes the specified MSG_Ping message. Does not implicitly {@link msg.MSG_Ping.verify|verify} messages.
             * @function encode
             * @memberof msg.MSG_Ping
             * @static
             * @param {msg.IMSG_Ping} message MSG_Ping message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            MSG_Ping.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.time_stamp != null && message.hasOwnProperty("time_stamp"))
                    writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.time_stamp);
                return writer;
            };
    
            /**
             * Encodes the specified MSG_Ping message, length delimited. Does not implicitly {@link msg.MSG_Ping.verify|verify} messages.
             * @function encodeDelimited
             * @memberof msg.MSG_Ping
             * @static
             * @param {msg.IMSG_Ping} message MSG_Ping message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            MSG_Ping.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a MSG_Ping message from the specified reader or buffer.
             * @function decode
             * @memberof msg.MSG_Ping
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {msg.MSG_Ping} MSG_Ping
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            MSG_Ping.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_Ping();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.time_stamp = reader.uint64();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a MSG_Ping message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof msg.MSG_Ping
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {msg.MSG_Ping} MSG_Ping
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            MSG_Ping.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a MSG_Ping message.
             * @function verify
             * @memberof msg.MSG_Ping
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            MSG_Ping.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.time_stamp != null && message.hasOwnProperty("time_stamp"))
                    if (!$util.isInteger(message.time_stamp) && !(message.time_stamp && $util.isInteger(message.time_stamp.low) && $util.isInteger(message.time_stamp.high)))
                        return "time_stamp: integer|Long expected";
                return null;
            };
    
            /**
             * Creates a MSG_Ping message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof msg.MSG_Ping
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {msg.MSG_Ping} MSG_Ping
             */
            MSG_Ping.fromObject = function fromObject(object) {
                if (object instanceof $root.msg.MSG_Ping)
                    return object;
                var message = new $root.msg.MSG_Ping();
                if (object.time_stamp != null)
                    if ($util.Long)
                        (message.time_stamp = $util.Long.fromValue(object.time_stamp)).unsigned = true;
                    else if (typeof object.time_stamp === "string")
                        message.time_stamp = parseInt(object.time_stamp, 10);
                    else if (typeof object.time_stamp === "number")
                        message.time_stamp = object.time_stamp;
                    else if (typeof object.time_stamp === "object")
                        message.time_stamp = new $util.LongBits(object.time_stamp.low >>> 0, object.time_stamp.high >>> 0).toNumber(true);
                return message;
            };
    
            /**
             * Creates a plain object from a MSG_Ping message. Also converts values to other types if specified.
             * @function toObject
             * @memberof msg.MSG_Ping
             * @static
             * @param {msg.MSG_Ping} message MSG_Ping
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            MSG_Ping.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults)
                    if ($util.Long) {
                        var long = new $util.Long(0, 0, true);
                        object.time_stamp = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                    } else
                        object.time_stamp = options.longs === String ? "0" : 0;
                if (message.time_stamp != null && message.hasOwnProperty("time_stamp"))
                    if (typeof message.time_stamp === "number")
                        object.time_stamp = options.longs === String ? String(message.time_stamp) : message.time_stamp;
                    else
                        object.time_stamp = options.longs === String ? $util.Long.prototype.toString.call(message.time_stamp) : options.longs === Number ? new $util.LongBits(message.time_stamp.low >>> 0, message.time_stamp.high >>> 0).toNumber(true) : message.time_stamp;
                return object;
            };
    
            /**
             * Converts this MSG_Ping to JSON.
             * @function toJSON
             * @memberof msg.MSG_Ping
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            MSG_Ping.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return MSG_Ping;
        })();
    
        msg.MSG_Pong = (function() {
    
            /**
             * Properties of a MSG_Pong.
             * @memberof msg
             * @interface IMSG_Pong
             * @property {msg.IMSG_Ping|null} [data] MSG_Pong data
             * @property {number|Long|null} [server_time] MSG_Pong server_time
             */
    
            /**
             * Constructs a new MSG_Pong.
             * @memberof msg
             * @classdesc Represents a MSG_Pong.
             * @implements IMSG_Pong
             * @constructor
             * @param {msg.IMSG_Pong=} [properties] Properties to set
             */
            function MSG_Pong(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * MSG_Pong data.
             * @member {msg.IMSG_Ping|null|undefined} data
             * @memberof msg.MSG_Pong
             * @instance
             */
            MSG_Pong.prototype.data = null;
    
            /**
             * MSG_Pong server_time.
             * @member {number|Long} server_time
             * @memberof msg.MSG_Pong
             * @instance
             */
            MSG_Pong.prototype.server_time = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
            /**
             * Creates a new MSG_Pong instance using the specified properties.
             * @function create
             * @memberof msg.MSG_Pong
             * @static
             * @param {msg.IMSG_Pong=} [properties] Properties to set
             * @returns {msg.MSG_Pong} MSG_Pong instance
             */
            MSG_Pong.create = function create(properties) {
                return new MSG_Pong(properties);
            };
    
            /**
             * Encodes the specified MSG_Pong message. Does not implicitly {@link msg.MSG_Pong.verify|verify} messages.
             * @function encode
             * @memberof msg.MSG_Pong
             * @static
             * @param {msg.IMSG_Pong} message MSG_Pong message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            MSG_Pong.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.data != null && message.hasOwnProperty("data"))
                    $root.msg.MSG_Ping.encode(message.data, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
                if (message.server_time != null && message.hasOwnProperty("server_time"))
                    writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.server_time);
                return writer;
            };
    
            /**
             * Encodes the specified MSG_Pong message, length delimited. Does not implicitly {@link msg.MSG_Pong.verify|verify} messages.
             * @function encodeDelimited
             * @memberof msg.MSG_Pong
             * @static
             * @param {msg.IMSG_Pong} message MSG_Pong message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            MSG_Pong.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a MSG_Pong message from the specified reader or buffer.
             * @function decode
             * @memberof msg.MSG_Pong
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {msg.MSG_Pong} MSG_Pong
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            MSG_Pong.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.msg.MSG_Pong();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.data = $root.msg.MSG_Ping.decode(reader, reader.uint32());
                        break;
                    case 2:
                        message.server_time = reader.uint64();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a MSG_Pong message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof msg.MSG_Pong
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {msg.MSG_Pong} MSG_Pong
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            MSG_Pong.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a MSG_Pong message.
             * @function verify
             * @memberof msg.MSG_Pong
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            MSG_Pong.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.data != null && message.hasOwnProperty("data")) {
                    var error = $root.msg.MSG_Ping.verify(message.data);
                    if (error)
                        return "data." + error;
                }
                if (message.server_time != null && message.hasOwnProperty("server_time"))
                    if (!$util.isInteger(message.server_time) && !(message.server_time && $util.isInteger(message.server_time.low) && $util.isInteger(message.server_time.high)))
                        return "server_time: integer|Long expected";
                return null;
            };
    
            /**
             * Creates a MSG_Pong message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof msg.MSG_Pong
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {msg.MSG_Pong} MSG_Pong
             */
            MSG_Pong.fromObject = function fromObject(object) {
                if (object instanceof $root.msg.MSG_Pong)
                    return object;
                var message = new $root.msg.MSG_Pong();
                if (object.data != null) {
                    if (typeof object.data !== "object")
                        throw TypeError(".msg.MSG_Pong.data: object expected");
                    message.data = $root.msg.MSG_Ping.fromObject(object.data);
                }
                if (object.server_time != null)
                    if ($util.Long)
                        (message.server_time = $util.Long.fromValue(object.server_time)).unsigned = true;
                    else if (typeof object.server_time === "string")
                        message.server_time = parseInt(object.server_time, 10);
                    else if (typeof object.server_time === "number")
                        message.server_time = object.server_time;
                    else if (typeof object.server_time === "object")
                        message.server_time = new $util.LongBits(object.server_time.low >>> 0, object.server_time.high >>> 0).toNumber(true);
                return message;
            };
    
            /**
             * Creates a plain object from a MSG_Pong message. Also converts values to other types if specified.
             * @function toObject
             * @memberof msg.MSG_Pong
             * @static
             * @param {msg.MSG_Pong} message MSG_Pong
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            MSG_Pong.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.data = null;
                    if ($util.Long) {
                        var long = new $util.Long(0, 0, true);
                        object.server_time = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                    } else
                        object.server_time = options.longs === String ? "0" : 0;
                }
                if (message.data != null && message.hasOwnProperty("data"))
                    object.data = $root.msg.MSG_Ping.toObject(message.data, options);
                if (message.server_time != null && message.hasOwnProperty("server_time"))
                    if (typeof message.server_time === "number")
                        object.server_time = options.longs === String ? String(message.server_time) : message.server_time;
                    else
                        object.server_time = options.longs === String ? $util.Long.prototype.toString.call(message.server_time) : options.longs === Number ? new $util.LongBits(message.server_time.low >>> 0, message.server_time.high >>> 0).toNumber(true) : message.server_time;
                return object;
            };
    
            /**
             * Converts this MSG_Pong to JSON.
             * @function toJSON
             * @memberof msg.MSG_Pong
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            MSG_Pong.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return MSG_Pong;
        })();
    
        return msg;
    })();

    return $root;
});
